
package ControlLayer;
import ModelLayer.*;
import java.util.ArrayList;


/**
 * @author (GP3 Product Solutions) 
 * @version (08-06-2011 THSS: Oprettelse af klassen)
 */
public class OrdreRegisterCtrl 
{
    // instans variabler
    private OrdreRegister ordreRegister;;
    private VareKatalogCtrl vareKatalogCtrl;
    private AdressebogCtrl adressebogCtrl;
    private Ordre o;
    
    /**
     * * Konstruktør for objekter af klassen OrdreRegisterCtrl
     */
    public OrdreRegisterCtrl()
    {
        ordreRegister = OrdreRegister.getInstance();
        vareKatalogCtrl = new VareKatalogCtrl();
        adressebogCtrl = new AdressebogCtrl(); 
    }
    
    /**
     * Metode der opretter en ordre og tilføjer den til ordreRegisteret
     * @param vareID int en vares ID
     * @param antal int antal vare
     */
    public void opretOrdre(int vareID, int antal)
    {
        String Dato = "09062011";
        int ordreID = ordreRegister.genererOrdreId();
        o = new Ordre(ordreID, Dato);
        ordreRegister.tilfoejOrdre(o);
        tilfoejDelOrdre(vareID, antal);
    }      
    
    /**
     * Metode der henter en ordres ordreID
     * @return int ordreID for en ordre
     */
    public int hentOrdreId()
    {
        return o.hentOrdreId();
    }
    
    /**
     * Metode der tilføjer en del ordre til en ordre
     * @param vareID int en vares ID
     * @param antal int antal vare
     */
    public void tilfoejDelOrdre(int vareID, int antal)
    {
        VareBeskrivelse vare = vareKatalogCtrl.findVareBeskrivelseId(vareID);
        o.tilfoejDelOrdre(vare, antal);
    }
    
    /**
     * Metode der finder en varebeskrivelse
     * @param vareNavn String en vares navn
     * @return VareBeskrivelse et objekt af typen VareBeskrivelse
     */
    public VareBeskrivelse findVareBeskrivelse(String vareNavn)
     {
         VareBeskrivelse vb = vareKatalogCtrl.findVareBeskrivelse(vareNavn);
         return vb;
     }
        
    /**
     * Metode der henter delordre listen fra en ordre
     * @param ordreId int ordrens id
     * @return ArrayList der indeholder delOrdre for en ordre
     */
    public ArrayList<DelOrdre> hentDelOrdreListe(int ordreId)
    {
         Ordre od = ordreRegister.findOrdre(ordreId);
         return od.hentDelOrdreListe();
    }

    /**
     * Metode der finder en ordre
     * @return ordre et objekt af typen Ordre
     */
     public Ordre findOrdre(int ordreId)
     {
         return ordreRegister.findOrdre(ordreId);
     }
     
     /**
      * Metode der tilføjer en person til en ordre
      * @param tlf int kundens tlf nummer
      * @param ordreId int en ordres ID
      */
     public void tilfoejPerson(int tlf, int ordreId)
     {
         Person k = adressebogCtrl.findPerson(tlf);
         Ordre od = findOrdre(ordreId);
         od.tilfoejKunde(k);    
     }
     
     /**
      * Metode der henter en person fra en ordre
      * @param ordreId int en ordres ID
      * @return Person et objekt af typen Person
      */
     public Person hentPerson(int ordreId)
     {
         Ordre od = findOrdre(ordreId);
         return od.hentKunde();
     }
     
     /**
      * Metode der tilføjer et ean nummer til en ordre
      * @param ean Long ean nummer
      * @param ordreId int en ordres ID
      */
     public void tilfoejEAN(Long ean, int ordreId)
     {
         Ordre od = findOrdre(ordreId);
         od.tilfoejEAN(ean);
     }
     
     /**
      * Metode der henter et ean nummer der er knyttet til en ordre
      * @param ordreId int en ordres ID
      * @return Long ean nummer
      */
     public Long hentEAN(int ordreId)
     {
         Ordre od = findOrdre(ordreId);
         return od.hentEAN();
     }
     
     /**
      * Metode der opdatere en ordres variabler
      * @param ordreId en ordres ID nummer
      */
     public void opdaterOrdre(int ordreId)
     {
         findOrdre(ordreId);
         //Denne metode er ikke implementeret
     }
     
     /**
      * Metodekald der udskriver alle ordre
      * @return 
      */
     public String udskrivAlleOrdre()
     {
         return ordreRegister.udskrivAlleOrdre();
     }  
     
     /**
      * Metodekald der udskriver alle tilbud
      * @return 
      */
     public void udskrivAlleTilbud()
     {
         ordreRegister.udskrivAlleTilbud();
     }
     
     /**
      * Metodekald der udskriver en ordrebekræftelse
      * @return 
      */
     public void udskrivOrdreBekreaeftlese()
     {
         ordreRegister.udskrivOrdreBekraeftelse();
     }
     
     /**
      * Metodekald der udskriver en følgeseddel
      * @return 
      */
     public void udskrivFoelgeseddel()
     {
         ordreRegister.udskrivFoelgeseddel();
     }
     
     /**
      * Metodekald der udregner en ordres totale pris
      * @param ordreId int en ordres ID
      * @return double total beløb
      */
     public double udregnOrdreTotal(int ordreId)
     {
        Ordre od = findOrdre(ordreId);
        return od.udregnTotal();
     }
     
     /**
      * Metode der opdatere lageret
      */
     public void opdaterLager()
     {
         int ordreId = o.hentOrdreId();
         ArrayList<DelOrdre> delOrdre = hentDelOrdreListe(ordreId);
         for(DelOrdre delod : delOrdre)
         {
              String navn = delod.hentDelOrdreVareNavn();
              int antal =  delod.hentDelOrdreAntal();
              vareKatalogCtrl.opdaterAntal(navn, antal);
         }
     }
     
     /**
      * Metode der nulstiller en ordre
      */
     public void nulstilOrdre()
     {
         o = null;
     }     
     
     /**
      * Metode der samler ordre detaljer til
      */
     
     /**
      * Opretter en ordre til GUI
      */
     public void opretOrdre1()
     {
        String Dato = "09062011";
        int ordreID = ordreRegister.genererOrdreId();
        o = new Ordre(ordreID, Dato);
        ordreRegister.tilfoejOrdre(o);
     }
     
     
     /**
      * Tilføjer del ordre til GUI ordren
      */
     public void tilfoejDelOrdre1(int vareID, int antal)
     {
        int ordreId = o.hentOrdreId();
        VareBeskrivelse vare = vareKatalogCtrl.findVareBeskrivelseId(vareID);
        Ordre od = ordreRegister.findOrdre(ordreId);
        od.tilfoejDelOrdre(vare, antal);
     }
}